package high.concurrent.util;

import java.util.*;
import java.util.Map.Entry;


/**
 * 公众平台通用接口工具类
 *
 * @date 2013-08-09setXml
 */
public class WeixinUtil {

     /**
      * 格式化
      * @param return_code
      * @param return_msg
      * @return
      */
     public static String setXml(String return_code, String return_msg) {
         return "<xml><return_code><![CDATA[" + return_code + "]]></return_code><return_msg><![CDATA[" + return_msg + "]]></return_msg></xml>";
     }

     /**
      * 微信回调-秘钥生成
      * @param map
      * @return
      */
     public static String checkSign(Map<String, String> map) {
         SortedMap<String, String> packageParams = new TreeMap<String, String>();
         packageParams.put("appid", map.get("appid"));
         packageParams.put("bank_type", map.get("bank_type"));// 付款银行
         packageParams.put("cash_fee", map.get("cash_fee"));// 支付金额
         packageParams.put("fee_type", map.get("fee_type"));//货币种类
         packageParams.put("is_subscribe", map.get("is_subscribe"));// 是否关注公众号(Y-关注，N-未关注)
         packageParams.put("mch_id", map.get("mch_id"));// 商户号
         packageParams.put("nonce_str", map.get("nonce_str"));//随机字符串
         packageParams.put("openid", map.get("openid"));//用户标识
         packageParams.put("out_trade_no", map.get("out_trade_no"));//商户订单号
         packageParams.put("result_code", map.get("result_code"));// 业务结果
         packageParams.put("return_code", map.get("return_code"));//返回状态码
         packageParams.put("time_end", map.get("time_end"));//支付完成时间
         packageParams.put("total_fee", map.get("total_fee"));//订单金额
         packageParams.put("trade_type", map.get("trade_type"));//交易类型
         packageParams.put("transaction_id", map.get("transaction_id"));//微信支付订单号

         StringBuffer sb = new StringBuffer();
         Set<Entry<String, String>> es = packageParams.entrySet();
         Iterator it = es.iterator();

         while(it.hasNext()) {
             Entry entry = (Entry)it.next();
             String k = (String)entry.getKey();
             String v = (String)entry.getValue();
             if (v != null && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
                 sb.append(k + "=" + v + "&");
             }
         }

         sb.append("key=" + "xxxxxx");
         String sign = MD5WeChat.MD5Encode(sb.toString()).toUpperCase();
         return sign;
     }

}
